#!/bin/bash
# virtual-serial-setup.sh
# 使用 socat + systemd 实现持久化虚拟串口

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 配置变量
CONFIG_FILE="/etc/virtual-serial.conf"
DEFAULT_PORTS=("ttyS100" "ttyS101" "ttyS102" "ttyS103")

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

log_debug() {
    echo -e "${BLUE}[DEBUG]${NC} $1"
}

# 检查root权限
check_root() {
    if [[ $EUID -eq 0 ]]; then
        log_error "请不要使用root权限运行此脚本"
        log_info "脚本会在需要时自动请求sudo权限"
        exit 1
    fi
}

# 检查并安装 socat
check_and_install_socat() {
    log_info "检查 socat 安装状态..."
    
    if command -v socat &> /dev/null; then
        log_info "socat 已安装"
        return 0
    fi
    
    log_warn "未检测到 socat，开始安装..."
    
    # 检测包管理器
    local package_manager=""
    if command -v apt &> /dev/null; then
        package_manager="apt"
    elif command -v yum &> /dev/null; then
        package_manager="yum"
    elif command -v dnf &> /dev/null; then
        package_manager="dnf"
    elif command -v zypper &> /dev/null; then
        package_manager="zypper"
    else
        log_error "未检测到支持的包管理器 (apt/yum/dnf/zypper)"
        log_error "请手动安装 socat:"
        log_error "  Ubuntu/Debian: sudo apt install socat"
        log_error "  CentOS/RHEL: sudo yum install socat"
        log_error "  Fedora: sudo dnf install socat"
        log_error "  openSUSE: sudo zypper install socat"
        exit 1
    fi
    
    echo ""
    echo "检测到包管理器: $package_manager"
    echo "需要安装以下依赖:"
    echo "  - socat: 虚拟串口创建工具"
    echo ""
    
    # 确认安装
    read -p "是否继续安装? [Y/n] " confirm
    confirm=${confirm:-Y}
    
    case $confirm in
        [Yy]*)
            log_info "开始安装 socat..."
            ;;
        [Nn]*)
            log_error "用户取消安装，脚本退出"
            exit 1
            ;;
        *)
            log_error "无效输入，脚本退出"
            exit 1
            ;;
    esac
    
    # 安装 socat
    case $package_manager in
        apt)
            log_info "更新软件包列表..."
            sudo apt update || {
                log_error "软件包列表更新失败"
                exit 1
            }
            
            log_info "安装 socat..."
            if sudo apt install -y socat; then
                log_info "socat 安装成功"
            else
                log_error "socat 安装失败"
                log_error "请尝试手动安装: sudo apt install socat"
                exit 1
            fi
            ;;
        yum)
            log_info "安装 socat..."
            if sudo yum install -y socat; then
                log_info "socat 安装成功"
            else
                log_error "socat 安装失败"
                log_error "请尝试手动安装: sudo yum install socat"
                exit 1
            fi
            ;;
        dnf)
            log_info "安装 socat..."
            if sudo dnf install -y socat; then
                log_info "socat 安装成功"
            else
                log_error "socat 安装失败"
                log_error "请尝试手动安装: sudo dnf install socat"
                exit 1
            fi
            ;;
        zypper)
            log_info "安装 socat..."
            if sudo zypper install -y socat; then
                log_info "socat 安装成功"
            else
                log_error "socat 安装失败"
                log_error "请尝试手动安装: sudo zypper install socat"
                exit 1
            fi
            ;;
    esac
    
    # 验证安装
    if command -v socat &> /dev/null; then
        log_info "socat 安装验证成功"
    else
        log_error "socat 安装后验证失败，请检查安装过程"
        exit 1
    fi
}

# 检查系统兼容性
check_system_compatibility() {
    log_info "检查系统兼容性..."
    
    # 检查 systemd
    if ! command -v systemctl &> /dev/null; then
        log_error "systemd 不可用，此脚本仅适用于使用 systemd 的系统"
        exit 1
    fi
    
    # 检查内核版本
    local kernel_version=$(uname -r)
    log_info "内核版本: $kernel_version"
}

# 检查现有串口设备
check_existing_serial_ports() {
    log_info "检查系统中现有的串口设备..."
    
    # 检查 ttyS 设备
    local existing_ttyS=($(ls /dev/ttyS* 2>/dev/null | grep -oE 'ttyS[0-9]+' | sort -V))
    if [[ ${#existing_ttyS[@]} -gt 0 ]]; then
        log_info "系统中现有的 ttyS 设备: ${existing_ttyS[*]}"
    fi
}

# 检查串口设备是否已被占用
check_port_availability() {
    local port=$1
    if [[ -e "/dev/$port" ]]; then
        # 检查是否是字符设备
        if [[ -c "/dev/$port" ]]; then
            log_warn "⚠ /dev/$port 已存在，可能是物理串口或其他虚拟串口"
            return 1
        else
            log_warn "⚠ /dev/$port 已存在但不是字符设备"
            return 1
        fi
    else
        log_info "✓ /dev/$port 可用"
        return 0
    fi
}

# 加载配置
load_config() {
    if [[ -f "$CONFIG_FILE" ]]; then
        log_info "检测到现有配置: $CONFIG_FILE"
        source "$CONFIG_FILE"
        if [[ -n "$VIRTUAL_PORTS" ]]; then
            IFS=',' read -ra CURRENT_PORTS <<< "$VIRTUAL_PORTS"
            log_info "当前配置的串口号: ${CURRENT_PORTS[*]}"
        fi
    else
        CURRENT_PORTS=("${DEFAULT_PORTS[@]}")
    fi
}

# 配置串口号
configure_ports() {
    echo -e "\n${GREEN}=== 虚拟串口配置 ===${NC}"
    
    # 显示现有串口设备信息
    check_existing_serial_ports
    
    if [[ -f "$CONFIG_FILE" ]]; then
        log_info "当前虚拟串口配置:"
        if [[ -n "$VIRTUAL_PORTS" ]]; then
            echo "  已配置的串口号: $VIRTUAL_PORTS"
        else
            echo "  使用默认串口号: ${DEFAULT_PORTS[*]}"
        fi
        
        echo ""
        echo "选择操作:"
        echo "  1) 保持当前配置"
        echo "  2) 修改串口号配置"
        echo "  3) 恢复默认配置"
        echo "  4) 退出脚本"
        
        read -p "请选择 [1-4]: " choice
        case $choice in
            1)
                log_info "保持当前配置"
                if [[ -n "$VIRTUAL_PORTS" ]]; then
                    IFS=',' read -ra CURRENT_PORTS <<< "$VIRTUAL_PORTS"
                else
                    CURRENT_PORTS=("${DEFAULT_PORTS[@]}")
                fi
                ;;
            2)
                modify_port_config
                ;;
            3)
                CURRENT_PORTS=("${DEFAULT_PORTS[@]}")
                save_config
                log_info "已恢复默认配置: ${CURRENT_PORTS[*]}"
                ;;
            4)
                log_info "退出脚本"
                exit 0
                ;;
            *)
                log_error "无效选择，保持当前配置"
                ;;
        esac
    else
        echo "当前没有虚拟串口配置，使用默认配置或自定义配置"
        echo "默认串口号: ${DEFAULT_PORTS[*]}"
        echo ""
        echo "选择操作:"
        echo "  1) 使用默认配置 (推荐)"
        echo "  2) 自定义串口号"
        
        read -p "请选择 [1-2]: " choice
        case $choice in
            1)
                CURRENT_PORTS=("${DEFAULT_PORTS[@]}")
                ;;
            2)
                modify_port_config
                ;;
            *)
                log_error "无效选择，使用默认配置"
                CURRENT_PORTS=("${DEFAULT_PORTS[@]}")
                ;;
        esac
    fi
    
    # 检查端口可用性
    echo ""
    log_info "检查串口设备可用性..."
    local all_available=true
    for port in "${CURRENT_PORTS[@]}"; do
        if ! check_port_availability "$port"; then
            all_available=false
        fi
    done
    
    if [[ "$all_available" == "false" ]]; then
        log_warn "部分串口设备可能已被占用"
        read -p "是否继续? [y/N] " confirm
        case $confirm in
            [Yy]*)
                log_info "继续执行..."
                ;;
            *)
                log_info "退出脚本"
                exit 0
                ;;
        esac
    fi
}

# 修改串口号配置
modify_port_config() {
    echo ""
    log_info "自定义虚拟串口配置"
    echo "当前配置的串口号: ${CURRENT_PORTS[*]}"
    echo ""
    echo "配置说明:"
    echo "  - 使用标准的串口设备名称，如: ttyS10, ttyS11, ttyUSB0, ttyACM0"
    echo "  - 每个串口号将创建一个虚拟串口设备"
    echo "  - 建议使用 ttyS100 以后的编号，避免与物理串口冲突"
    echo "  - 可以配置多个串口号，用逗号分隔"
    echo ""
    echo "示例:"
    echo "  ttyS100,ttyS101,ttyS102,ttyS103"
    echo "  ttyUSB10,ttyUSB11,ttyUSB12"
    echo "  ttyACM10,ttyACM11"
    echo ""
    
    read -p "请输入串口号 (用逗号分隔): " port_input
    
    if [[ -z "$port_input" ]]; then
        log_error "输入为空，使用默认配置"
        CURRENT_PORTS=("${DEFAULT_PORTS[@]}")
    else
        # 清理输入，移除空格
        port_input=$(echo "$port_input" | tr -d ' ')
        
        # 验证输入格式 (允许 ttyS*, ttyUSB*, ttyACM* 等标准串口名称)
        if [[ "$port_input" =~ ^tty([S]|[U][S][B]|[A][C][M])[0-9]+(,tty([S]|[U][S][B]|[A][C][M])[0-9]+)*$ ]]; then
            IFS=',' read -ra CURRENT_PORTS <<< "$port_input"
            log_info "配置的串口号: ${CURRENT_PORTS[*]}"
            save_config
        else
            log_error "输入格式错误，请使用标准的串口设备名称"
            log_error "有效格式: ttyS100, ttyUSB10, ttyACM10 等"
            log_error "使用默认配置: ${DEFAULT_PORTS[*]}"
            CURRENT_PORTS=("${DEFAULT_PORTS[@]}")
        fi
    fi
}

# 保存配置
save_config() {
    log_info "保存配置到 $CONFIG_FILE"
    local ports_str=$(IFS=','; echo "${CURRENT_PORTS[*]}")
    
    sudo tee "$CONFIG_FILE" > /dev/null <<EOF
# 虚拟串口配置
VIRTUAL_PORTS="$ports_str"
CONFIG_VERSION="1.0"
CONFIG_DATE="$(date)"
EOF

    sudo chmod 644 "$CONFIG_FILE"
}

# 清理现有服务
cleanup_existing_services() {
    log_info "检查并清理现有服务..."
    
    # 停止并禁用服务
    if systemctl is-active --quiet virtual-serial-multi.service 2>/dev/null; then
        log_info "停止正在运行的虚拟串口服务..."
        sudo systemctl stop virtual-serial-multi.service || true
    fi
    
    if systemctl is-enabled --quiet virtual-serial-multi.service 2>/dev/null; then
        log_info "禁用虚拟串口服务..."
        sudo systemctl disable virtual-serial-multi.service || true
    fi
    
    # 停止所有socat进程
    if pgrep -f "socat.*pty,link" > /dev/null; then
        log_info "停止所有虚拟串口进程..."
        sudo pkill -f "socat.*pty,link" || true
        sleep 2
    fi
    
    # 清理PID文件
    if sudo ls /var/run/virtual-serial-*.pid 2>/dev/null; then
        log_info "清理PID文件..."
        sudo rm -f /var/run/virtual-serial-*.pid
    fi
}

# 创建虚拟串口配置
create_serial_config() {
    local config_file="/etc/systemd/system/virtual-serial@.service"
    
    log_info "创建 systemd 服务配置..."
    
    # 如果文件已存在，备份
    if [[ -f "$config_file" ]]; then
        sudo cp "$config_file" "$config_file.backup.$(date +%Y%m%d%H%M%S)"
        log_info "已备份现有配置: $config_file.backup.*"
    fi
    
    sudo tee "$config_file" > /dev/null <<EOF
[Unit]
Description=Virtual Serial Port %I
After=network.target

[Service]
Type=forking
ExecStart=/usr/bin/socat -d -d pty,link=/dev/%I,raw,echo=0,perm=0666 /dev/null
Restart=always
RestartSec=3
User=root

[Install]
WantedBy=multi-user.target
EOF

    log_info "Systemd 服务配置已创建: $config_file"
}

# 创建多端口服务
create_multi_port_service() {
    local service_file="/etc/systemd/system/virtual-serial-multi.service"
    
    log_info "创建多端口虚拟串口服务..."
    
    # 如果文件已存在，备份
    if [[ -f "$service_file" ]]; then
        sudo cp "$service_file" "$service_file.backup.$(date +%Y%m%d%H%M%S)"
        log_info "已备份现有配置: $service_file.backup.*"
    fi
    
    sudo tee "$service_file" > /dev/null <<EOF
[Unit]
Description=Multiple Virtual Serial Ports
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/start-virtual-serials.sh
ExecStop=/usr/local/bin/stop-virtual-serials.sh
Restart=always
RestartSec=5
User=root

[Install]
WantedBy=multi-user.target
EOF

    log_info "多端口服务配置已创建: $service_file"
}

# 创建启动脚本
create_start_script() {
    local script_file="/usr/local/bin/start-virtual-serials.sh"
    
    log_info "创建虚拟串口启动脚本..."
    
    # 生成端口配置部分
    local ports_list=$(IFS=' '; echo "${CURRENT_PORTS[*]}")
    
    # 如果文件已存在，备份
    if [[ -f "$script_file" ]]; then
        sudo cp "$script_file" "$script_file.backup.$(date +%Y%m%d%H%M%S)"
        log_info "已备份现有脚本: $script_file.backup.*"
    fi
    
    sudo tee "$script_file" > /dev/null <<EOF
#!/bin/bash
# 启动多个虚拟串口

PORTS=($ports_list)

for port in "\${PORTS[@]}"; do
    # 检查是否已经存在
    if [ -e "/dev/\${port}" ]; then
        echo "虚拟串口 \${port} 已存在，跳过创建"
        continue
    fi
    
    echo "启动虚拟串口: \${port}"
    # 使用 nohup 让 socat 在后台持续运行
    nohup socat -d -d \\
        pty,link=/dev/\${port},raw,echo=0,perm=0666 \\
        pty,link=/dev/\${port}_peer,raw,echo=0,perm=0666 > /var/log/virtual-serial-\${port}.log 2>&1 &
    SOCAT_PID=\$!
    echo \$SOCAT_PID > /var/run/virtual-serial-\${port}.pid
    
    # 等待设备文件创建
    counter=0
    while [ ! -e "/dev/\${port}" ]; do
        sleep 0.1
        counter=\$((counter + 1))
        if [ \$counter -gt 50 ]; then
            echo "错误: 虚拟串口 \${port} 设备文件创建超时"
            break
        fi
    done
    
    # 设置权限
    if [ -e "/dev/\${port}" ]; then
        chmod 666 "/dev/\${port}" "/dev/\${port}_peer" 2>/dev/null || true
        echo "虚拟串口 \${port} 已启动: /dev/\${port}"
    fi
done

# 显示创建的设备
echo "=== 已创建的虚拟串口 ==="
for port in "\${PORTS[@]}"; do
    if [ -e "/dev/\${port}" ]; then
        echo "✓ /dev/\${port}"
    else
        echo "✗ /dev/\${port} (创建失败)"
    fi
done

# 保持脚本运行，防止服务退出
sleep 2
EOF

    sudo chmod +x "$script_file"
    log_info "启动脚本已创建: $script_file"
}

# 创建停止脚本
create_stop_script() {
    local script_file="/usr/local/bin/stop-virtual-serials.sh"
    
    log_info "创建虚拟串口停止脚本..."
    
    # 如果文件已存在，备份
    if [[ -f "$script_file" ]]; then
        sudo cp "$script_file" "$script_file.backup.$(date +%Y%m%d%H%M%S)"
        log_info "已备份现有脚本: $script_file.backup.*"
    fi
    
    sudo tee "$script_file" > /dev/null <<EOF
#!/bin/bash
# 停止所有虚拟串口进程

echo "停止虚拟串口服务..."

# 杀死所有socat进程
pkill -f "socat.*pty,link" || true

# 等待进程结束
sleep 2

# 再次检查并强制杀死
if pgrep -f "socat.*pty,link" > /dev/null; then
    echo "强制停止残留进程..."
    pkill -9 -f "socat.*pty,link" || true
fi

# 删除PID文件
rm -f /var/run/virtual-serial-*.pid

# 删除日志文件
rm -f /var/log/virtual-serial-*.log

echo "所有虚拟串口已停止"
EOF

    sudo chmod +x "$script_file"
    log_info "停止脚本已创建: $script_file"
}

# 创建管理脚本（修复local问题）
create_management_script() {
    local script_file="/usr/local/bin/virtual-serial-manager.sh"
    
    log_info "创建虚拟串口管理脚本..."
    
    # 如果文件已存在，备份
    if [[ -f "$script_file" ]]; then
        sudo cp "$script_file" "$script_file.backup.$(date +%Y%m%d%H%M%S)"
        log_info "已备份现有脚本: $script_file.backup.*"
    fi
    
    sudo tee "$script_file" > /dev/null <<'EOF'
#!/bin/bash
# 虚拟串口管理脚本

CONFIG_FILE="/etc/virtual-serial.conf"

# 加载配置函数
load_config() {
    if [[ -f "$CONFIG_FILE" ]]; then
        source "$CONFIG_FILE"
        if [[ -n "$VIRTUAL_PORTS" ]]; then
            IFS=',' read -ra PORTS_LIST <<< "$VIRTUAL_PORTS"
        else
            PORTS_LIST=("ttyS100" "ttyS101" "ttyS102" "ttyS103")
        fi
    else
        PORTS_LIST=("ttyS100" "ttyS101" "ttyS102" "ttyS103")
    fi
}

# 显示状态函数
show_status() {
    echo "=== 虚拟串口服务状态 ==="
    systemctl status virtual-serial-multi.service --no-pager -l
    
    echo -e "\n=== 虚拟串口设备状态 ==="
    for port in "${PORTS_LIST[@]}"; do
        if [ -e "/dev/${port}" ]; then
            if pgrep -f "socat.*${port}" > /dev/null; then
                echo "  /dev/${port} [运行中]"
            else
                echo "  /dev/${port} [设备存在但进程未运行]"
            fi
        else
            echo "  /dev/${port} [未创建]"
        fi
    done
    
    echo -e "\n=== 虚拟串口进程 ==="
    pgrep -af "socat.*pty,link" || echo "没有运行的虚拟串口进程"
}

# 显示列表函数
show_list() {
    echo "虚拟串口配置:"
    for port in "${PORTS_LIST[@]}"; do
        if [ -e "/dev/${port}" ] && pgrep -f "socat.*${port}" > /dev/null; then
            echo "  /dev/${port} [运行中]"
        else
            echo "  /dev/${port} [未运行]"
        fi
    done
}

# 测试端口函数
test_port() {
    local port="$1"
    echo "测试虚拟串口 ${port}..."
    if [ ! -e "/dev/${port}" ]; then
        echo "错误: 虚拟串口 /dev/${port} 不存在"
        exit 1
    fi
    
    # 测试串口
    echo "测试消息 $(date)" > "/dev/${port}"
    echo "测试完成，数据已发送到 /dev/${port}"
}

# 显示配置函数
show_config() {
    echo "当前虚拟串口配置:"
    if [[ -f "$CONFIG_FILE" ]]; then
        cat "$CONFIG_FILE"
    else
        echo "使用默认配置"
        echo "串口号: ${PORTS_LIST[*]}"
    fi
}

# 显示日志函数
show_logs() {
    local port="$1"
    echo "查看虚拟串口 ${port} 日志:"
    if [ -f "/var/log/virtual-serial-${port}.log" ]; then
        tail -f "/var/log/virtual-serial-${port}.log"
    else
        echo "没有找到 /var/log/virtual-serial-${port}.log 日志文件"
        echo "可能的原因:"
        echo "  1. 虚拟串口 ${port} 尚未启动"
        echo "  2. 日志文件还未生成"
        echo "  3. 检查服务状态: sudo systemctl status virtual-serial-multi.service"
    fi
}

# 主程序
main() {
    # 加载配置
    load_config
    
    # 获取参数
    ACTION="${1:-status}"
    PORT="${2:-${PORTS_LIST[0]}}"
    
    case "$ACTION" in
        start)
            echo "启动虚拟串口服务..."
            sudo systemctl start virtual-serial-multi.service
            ;;
        stop)
            echo "停止虚拟串口服务..."
            sudo systemctl stop virtual-serial-multi.service
            ;;
        restart)
            echo "重启虚拟串口服务..."
            sudo systemctl restart virtual-serial-multi.service
            ;;
        enable)
            echo "启用虚拟串口服务开机自启..."
            sudo systemctl enable virtual-serial-multi.service
            ;;
        disable)
            echo "禁用虚拟串口服务开机自启..."
            sudo systemctl disable virtual-serial-multi.service
            ;;
        status)
            show_status
            ;;
        list)
            show_list
            ;;
        test)
            test_port "$PORT"
            ;;
        config)
            show_config
            ;;
        logs)
            show_logs "$PORT"
            ;;
        *)
            echo "用法: $0 {start|stop|restart|enable|disable|status|list|test|config|logs} [端口]"
            echo "  端口: ${PORTS_LIST[*]} (默认为 ${PORTS_LIST[0]})"
            echo ""
            echo "示例:"
            echo "  $0 start        # 启动虚拟串口服务"
            echo "  $0 stop         # 停止虚拟串口服务"
            echo "  $0 status       # 查看状态"
            echo "  $0 test ttyS100 # 测试串口 ttyS100"
            echo "  $0 list         # 列出所有串口"
            echo "  $0 config       # 显示配置"
            echo "  $0 logs ttyS100 # 查看串口日志"
            ;;
    esac
}

# 运行主程序
main "$@"
EOF

    sudo chmod +x "$script_file"
    log_info "管理脚本已创建: $script_file"
}

# 创建 udev 规则
create_udev_rules() {
    local udev_file="/etc/udev/rules.d/99-virtual-serial.rules"
    
    log_info "创建 udev 规则..."
    
    # 如果文件已存在，备份
    if [[ -f "$udev_file" ]]; then
        sudo cp "$udev_file" "$udev_file.backup.$(date +%Y%m%d%H%M%S)"
        log_info "已备份现有规则: $udev_file.backup.*"
    fi
    
    # 为每个端口创建udev规则
    for port in "${CURRENT_PORTS[@]}"; do
        echo "KERNEL==\"${port}\", MODE=\"0666\"" | sudo tee -a "$udev_file" > /dev/null
        echo "KERNEL==\"${port}_peer\", MODE=\"0666\"" | sudo tee -a "$udev_file" > /dev/null
    done

    sudo udevadm control --reload-rules
    sudo udevadm trigger
    
    log_info "Udev 规则已创建: $udev_file"
}

# 启用服务
enable_services() {
    log_info "启用虚拟串口服务..."
    
    sudo systemctl daemon-reload
    sudo systemctl enable virtual-serial-multi.service
    sudo systemctl start virtual-serial-multi.service
    
    log_info "等待服务启动..."
    sleep 5
    
    # 检查服务状态
    if systemctl is-active --quiet virtual-serial-multi.service; then
        log_info "虚拟串口服务启动成功"
    else
        log_error "虚拟串口服务启动失败"
        sudo systemctl status virtual-serial-multi.service --no-pager -l
        exit 1
    fi
}

# 验证安装
verify_installation() {
    log_info "验证虚拟串口安装..."
    
    echo -e "\n${GREEN}=== 安装验证 ===${NC}"
    
    # 检查设备文件
    echo "检查虚拟串口设备:"
    local success_count=0
    for port in "${CURRENT_PORTS[@]}"; do
        if [[ -e "/dev/$port" ]]; then
            log_info "虚拟串口 $port: ✓ 已创建 (/dev/$port)"
            ((success_count++))
        else
            log_error "虚拟串口 $port: ✗ 创建失败"
        fi
    done
    
    # 检查进程
    echo -e "\n检查虚拟串口进程:"
    local process_count=$(pgrep -f "socat.*pty,link" | wc -l)
    log_info "运行的虚拟串口进程数: $process_count"
    
    # 检查服务状态
    echo -e "\n检查服务状态:"
    sudo systemctl status virtual-serial-multi.service --no-pager -l
    
    if [[ $success_count -eq ${#CURRENT_PORTS[@]} ]]; then
        log_info "所有虚拟串口创建成功!"
    else
        log_warn "部分虚拟串口创建失败，但服务已启动"
    fi
    
    # 显示使用说明
    echo -e "\n${GREEN}=== 使用说明 ===${NC}"
    echo "管理虚拟串口: sudo /usr/local/bin/virtual-serial-manager.sh [命令]"
    echo "可用命令: start, stop, restart, status, list, test, config, logs"
    echo ""
    echo "创建的虚拟串口:"
    for port in "${CURRENT_PORTS[@]}"; do
        echo "  /dev/$port"
    done
    echo ""
    echo "测试示例:"
    echo "  终端1: cat /dev/${CURRENT_PORTS[0]}"
    echo "  终端2: echo 'Hello World' > /dev/${CURRENT_PORTS[0]}"
}

# 主函数
main() {
    echo -e "${GREEN}=== 虚拟串口持久化配置脚本 ===${NC}"
    
    check_root
    check_and_install_socat
    check_system_compatibility
    load_config
    configure_ports
    cleanup_existing_services
    create_serial_config
    create_multi_port_service
    create_start_script
    create_stop_script
    create_management_script
    create_udev_rules
    enable_services
    verify_installation
    
    echo -e "\n${GREEN}=== 配置完成! ===${NC}"
    log_info "虚拟串口现在会在系统启动时自动创建"
    log_info "使用 'sudo /usr/local/bin/virtual-serial-manager.sh' 来管理虚拟串口"
    log_info "配置文件位置: $CONFIG_FILE"
}

# 运行主函数
main "$@"